/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gestorSimilar;


import java.sql.ResultSet;
import java.sql.SQLException;
import util.exceptions.PaginaNoExistenteException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Nacho
 */
public class Recomendaciones implements Iterator<Pagina>, Iterable<Pagina>{
    private int limiteSuperior; //el ultimo que llame
    private static final int RANGO = 5;
    private LinkedList<Pagina> paginas;
    private int idUser;
    
    static Recomendaciones getRecomendaciones(int idUser){
        LinkedList<Pagina> paginas = getNextRecomendaciones(idUser, 0);
        Recomendaciones rec = new Recomendaciones(paginas, idUser);
        return rec;
    }
    private static LinkedList<Pagina> getNextRecomendaciones(int idUser, int limiteSuperior) {
        Conexion cn = Conexion.getConexion();
        ResultSet rs = null;
        try {
            rs = cn.ejecutaSP("getRecomendaciones("+idUser+","+limiteSuperior+","+RANGO+")");
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return Pagina.fromRStoList(rs); 
    }
    
    
    private Recomendaciones(){
        
    }
    private Recomendaciones(LinkedList<Pagina> paginas, int idUser){
        this.paginas = paginas;
        limiteSuperior = paginas.size();
        this.idUser=idUser;
    }
    
    public Iterator<Pagina> iterator(){
        return this;
    }
    @Override
    public boolean hasNext() {
        if(paginas.isEmpty()){
            LinkedList<Pagina> nvasP = getNextRecomendaciones(idUser, limiteSuperior);
            paginas.addAll(nvasP);
            limiteSuperior += paginas.size();
            if(paginas.isEmpty()){
                return false;
            }
        }
        return true;
    }
    @Override
    public Pagina next() {
        if(!hasNext()){
            throw new PaginaNoExistenteException();
        }
        return paginas.poll();
    }
    @Override
    public void remove() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
   

    @Override
    public String toString() {
        String s = "Recomendaciones{" + "limiteSuperior=" + limiteSuperior + ", idUser=" + idUser + '}';
        for (Pagina pagina : paginas) {
            s = s + "\n"+pagina; 
        }
        return s;
    }
    
     public static void main(String[] args) {
        Recomendaciones r = Recomendaciones.getRecomendaciones(1);
        System.out.println(r); 
         System.out.println("");
        for (Pagina p : r) {
             System.out.println(p);
         }
        
        
        
    }
    
    
    
}
